package com.example.behaviorpattern.mediator;

import com.example.behaviorpattern.mediator.impl.ConcreteColleagueA;
import com.example.behaviorpattern.mediator.impl.ConcreteColleagueB;
import com.example.behaviorpattern.mediator.impl.ConcreteMediator;

/**
 * 中介者模式: 模拟中介行为
 * 中介者模式是一种行为型设计模式，它通过一个中介对象来封装一系列对象之间的交互。
 * 中介者模式使得对象不需要显式地相互引用，从而使其耦合松散，同时可以独立地改变它们之间的交互。
 * 中介者模式适用的场景包括：
 * 当一组对象以定义良好但复杂的方式进行通信，并且你想避免组件间的混乱依赖关系时。
 * 当多个类相互依赖，并且逻辑或计算过程牵涉其中时，使用中介者模式可重新组织这些类关系。
 * 减少继承导致的依赖，把原本的网状结构变成星型结构。
 * 中介者模式需要以下组件：
 * Mediator：一个接口，定义了用于通信的方法。
 * ConcreteMediator：Mediator接口的实现类，它知道所有的同事类，并从具体的同事对象接收消息，之后向同事对象发出命令。
 * Colleague：抽象同事类，通常用来定义类之间通信的接口。
 * ConcreteColleague：Colleague类的具体实现，每个具体同事只知道自己的行为，而不了解其他同事类的情况，但它们都认识中介者对象。
 *
 * @author yaojianfeng
 */
public class MediatorTest {

    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();
        ConcreteColleagueA colleague1 = new ConcreteColleagueA(mediator);
        ConcreteColleagueB colleague2 = new ConcreteColleagueB(mediator);

        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.send("How are you?");
        colleague2.send("Fine, thanks!");
    }
}
